//
// Created by Lenovo on 2021/12/23.
//

#ifndef SEQUENCE_CIRCULATIONQUEUE_SEQUENCE_CIRCULATIONQUEUE_H
#define SEQUENCE_CIRCULATIONQUEUE_SEQUENCE_CIRCULATIONQUEUE_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define MAX_QSIZE 100   //队列最长长度


enum Status{OK=1,ERROR=-2,TRUE=1,FALSE=0,EMPTY=-1,OVERFLOW=-3};
typedef enum Status Status;

typedef int QElemType;  //自定义元素类型

typedef struct {

    QElemType *base;    //在队列构造之前和销毁之后，base的值为NULL
    int front;          //头指针，若队列不空，指向队列头元素
    int rear;           //尾指针，托队列不空，指向队列尾元素的下一个位置
}SqQueue;

Status InitQueue(SqQueue *Q);   //构造一个空队
Status DestroyQueue(SqQueue *Q);    //销毁队Q，Q不再存在
Status ClearQueue(SqQueue *Q);  //把Q置为空队
Status QueueEmpty(SqQueue Q);   //若Q为空队返回TRUE，否则返回FALSE
int QueueLength(SqQueue Q);     //返回Q的元素个数，即队的长度
QElemType* GetHead(SqQueue Q);  //若队不空，则返回队头元素，否则返回NULL
Status EnQueue(SqQueue *Q,QElemType e);    //插入元素e为
QElemType DeQueue(SqQueue *Q);  //若队不空，则删除队头元素并返回，否则退出
Status QueueTraverse(SqQueue Q,Status (*visit)(QElemType));     //从队尾到队头一次对队中每个元素调用函数visit（），一旦visit（）失败，则返回ERROR

#endif //SEQUENCE_CIRCULATIONQUEUE_SEQUENCE_CIRCULATIONQUEUE_H
